﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Grupo2.Dominio;
using System.Data.SqlClient;

namespace Grupo2.Persistencia
{
    public class EstudioAcademicoDAO
    {
        //Atributos
        private String cadenaConexion = "Data Source=LOCALHOST;Initial Catalog=Grupo2;User Id=grupo2;Password=grupo2;";
        private SqlConnection conexion;

        public EstudioAcademicoDAO()
        {
            conexion = new SqlConnection(cadenaConexion);
        }

        //Creando un Estudio Academico
        public EstudioAcademico CrearEstudioAcademico(EstudioAcademico estudioAcademico)
        {
            conexion.Open();
            String sentencia = "INSERT INTO Estudio_Academico VALUES(" + estudioAcademico.Id_Estudio_Academico + "," +
                                                                estudioAcademico.Postulante.Id_Postulante + ",'" +
                                                                estudioAcademico.Nombre_Institucion + "','" +
                                                                estudioAcademico.Tipo_Estudio + "','" +
                                                                estudioAcademico.Fecha_Inicio + "','" +
                                                                estudioAcademico.Fecha_Fin + "','" +
                                                                estudioAcademico.Grado_Obtenido + "')";
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            comando.ExecuteNonQuery();
            conexion.Close();
            return this.ObtenerEstudioAcademico(estudioAcademico.Id_Estudio_Academico); //TODO: Queda pendiente de devolver objeto creado
        }

        //Obteniendo un Estudio Academico
        public EstudioAcademico ObtenerEstudioAcademico(Int32 Id_Estudio_Academico)
        {
            conexion.Open();
            
            String sentencia = "SELECT * FROM Estudio_Academico WHERE Id_Estudio_Academico='" + Id_Estudio_Academico + "'";
            
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            
            EstudioAcademico estudioAcademico = new EstudioAcademico();
            
            if (resultado.HasRows) //Si el resultado tiene filas, llenamos el objeto
            {
                resultado.Read(); //Avanzar el índice de la lista de la fila 0 a la fila 1
                estudioAcademico.Id_Estudio_Academico = Convert.ToInt32(resultado["Id_Estudio_Academico"]);
                estudioAcademico.Postulante.Id_Postulante = Convert.ToInt32(resultado["Id_postulante"]);
                estudioAcademico.Nombre_Institucion = (String)resultado["Nombre_Institucion"];
                estudioAcademico.Tipo_Estudio = (String)resultado["Tipo_Estudio"];
                estudioAcademico.Fecha_Inicio = (DateTime)resultado["Fecha_Inicio"];
                estudioAcademico.Fecha_Fin = (DateTime)resultado["Fecha_Fin"];
                estudioAcademico.Grado_Obtenido = (String)resultado["Grado_Obtenido"];
            }
            else // Retornamos una excepción si no existe el registro en la BD
            {
                //throw new Exception("El codigo solicitado no existe en la BD");
                estudioAcademico = null;
            }
            conexion.Close();
            return estudioAcademico;
        }
        
        //Modificando un Estudio Academico
        public EstudioAcademico ModificarEstudioAcademico(EstudioAcademico estudioAcademico)
        {
            EstudioAcademico estudioAcademicoRegistrado = this.ObtenerEstudioAcademico(estudioAcademico.Id_Estudio_Academico);
            String sentencia = "UPDATE Estudio_Academico " +
                                "SET " +
                                    //"Id_Postulante=@Id_Postulante, " +
                                    "Nombre_Institucion=@Nombre_Institucion, " +
                                    "Tipo_Estudio=@Tipo_Estudio, " +
                                    "Fecha_Inicio=@Fecha_Inicio, " +
                                    "Fecha_Fin=@Fecha_Fin, " +
                                    "Grado_Obtenido=@Grado_Obtenido, " +
                                    "WHERE " +
                                    "Id_Estudio_Academico=@Id_Estudio_Academico";
            this.conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter Id_Estudio_Academico = new SqlParameter("@Id_Estudio_Academico", System.Data.SqlDbType.NVarChar);
                Id_Estudio_Academico.Value = estudioAcademico.Id_Estudio_Academico;
                comando.Parameters.Add(Id_Estudio_Academico);

                /*SqlParameter Id_Postulante = new SqlParameter("@Id_Postulante", System.Data.SqlDbType.NVarChar);
                Id_Postulante.Value = estudioAcademico.Id_Postulante;
                comando.Parameters.Add(Id_Postulante);*/

                SqlParameter Nombre_Institucion = new SqlParameter("@Nombre_Institucion", System.Data.SqlDbType.Int);
                Nombre_Institucion.Value = estudioAcademico.Nombre_Institucion;
                comando.Parameters.Add(Nombre_Institucion);

                SqlParameter Tipo_Estudio = new SqlParameter("@Tipo_Estudio", System.Data.SqlDbType.NVarChar);
                Tipo_Estudio.Value = estudioAcademico.Tipo_Estudio;
                comando.Parameters.Add(Tipo_Estudio);

                SqlParameter Fecha_Inicio = new SqlParameter("@Fecha_Inicio", System.Data.SqlDbType.NVarChar);
                Fecha_Inicio.Value = estudioAcademico.Fecha_Inicio;
                comando.Parameters.Add(Fecha_Inicio);

                SqlParameter Fecha_Fin = new SqlParameter("@Fecha_Fin", System.Data.SqlDbType.NVarChar);
                Fecha_Fin.Value = estudioAcademico.Fecha_Fin;
                comando.Parameters.Add(Fecha_Fin);

                SqlParameter Grado_Obtenido = new SqlParameter("@Grado_Obtenido", System.Data.SqlDbType.NVarChar);
                Grado_Obtenido.Value = estudioAcademico.Grado_Obtenido;
                comando.Parameters.Add(Grado_Obtenido);

                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
            return this.ObtenerEstudioAcademico(estudioAcademico.Id_Estudio_Academico);
        }

        //Eliminando un Estudio Academico
        public void EliminarEstudioAcademico(Int32 Id_Estudio_Academico_A_Eliminar)
        {
            String sentencia = "DELETE FROM Estudio_Academico WHERE Id_Estudio_Academico=@Id_Estudio_Academico_A_Eliminar";
            this.conexion.Open();

            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter pk = new SqlParameter("@Id_Estudio_Academico_A_Eliminar", System.Data.SqlDbType.NVarChar);
                pk.Value = Id_Estudio_Academico_A_Eliminar;
                comando.Parameters.Add(pk);
                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
        }
    }
}